Sheet 1
Scalable Server
  Server
    Has Clients
    Keeps track of messages
      Persistent Storage?
        MariaDB
        MySQL
        sQLite
        FileSystem
          Not usable in production environments
          IO is slow and can get conflicted
          Primary Storage would be in memory anyway
      Memory Storage
        No persistency
    Serves as a host
    Connects to other servers
    Hosts Files through API
    Has own address
  Client
    Has "Plugins"
    Sends messages and files to their host
    Files are hosted by the server
    Clients have their own address given to them by their server
  Plugins
    Plugin is a worker
    Plugins are client based
    Every message that's being worked on, is put in a Job
  Messages
    Have a verifiable code
    Will be send through every channel
    Servers only handle messages which they have not received before
    A message is always resend to everyone, unless the message has been received before
    Messages can have a specific addressee
      Addresses contain both host and client keys
      Client specific messages are send to every server, until all servers have received it
      This does NOT mean the message has been received!
    Messages do not contain files
    Content is only JSON
      (Serializable content)
  API
    API is hosted through HTTP
    API receives JSON
    API sends JSON / Binary
    API is completely server based, and does not "ask" things from plugins, only clients
  Other
    Socket.IO is a bad idea.
    Socket.IO has been removed
  Job
    Has Message
    Has addressee
    Has result
      Always a JSON object